/*
 * Clase que coordina la busqueda en la web
 * 
 * @author HPCIII_Team2013
 */

package cl.ucn.hpc.spider;

import java.io.IOException;
import java.io.InputStream;
import java.io.Serializable;
import java.util.List;

public class Spider extends Tools implements Serializable {
	//Creado automaticamente por java para clases serializables
	private static final long serialVersionUID = -4813949848407104286L;

	/*
	 * Constructor de la clase
	 * 
	 * @param path Directorio general donde debe almacenar la informacion recibida
	 */
	public Spider(final String path) {
		super(path);
	}

	/*
	 * Realiza el proceso de busqueda por la web y almacena la informacion necesaria
	 * 
	 * @param url Link de la pagina que debe procesar
	 * @return Lista de paginas que se redireccionan desde la que se analiza
	 */
	public List<String> trabajar(final String url) {
		//Descarga la pagina con anotaciones HTML y obtiene su nombre
		InputStream file = null;
		String host = null;
		try {
			file = fetch(url);
			host = host(url);
		} catch (IOException e) {
			return null;
		}

		//Convierte la pagina a texto con anotaciones HTML
		String archivo = null;

		try {
			archivo = htmltext(file);

		} catch (IOException e1) {
			e1.printStackTrace();
		}
		
		//Obtiene los links contenidos en la pagina analizada
		List<String> links = null;
		try {
			links = links(archivo);

		} catch (IOException e) {
			e.printStackTrace();
		}
		
		//Obtiene los links de las imagenes contenidas en la pagina analizada
		try {
			List<String> images = images(archivo);
		} catch (IOException e) {
			e.printStackTrace();
		}

		//Extrae texto sin anotaciones HTML de la pagina analizada
		String text = null;
		try {
			text = text(archivo);
		} catch (IOException e) {
			e.printStackTrace();
		}
		
		//Guarda el texto de la pagina sin anotaciones HTML
		try {
			save(text, host);
		} catch (IOException e) {
			e.printStackTrace();
		}

		//Retorna los links que encontro
		return links;

	}
}
